/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Dao;

import Pojo.Disciplina;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 *
 * @author maione
 */
public class DisciplinaDaoImplJPA implements DisciplinaDao{
        /**
	 * Adicionar uma Disciplina ao banco de dados de Disciplinas
	 * @param disciplina
	 * @return true ou false indicando sucesso ou não
	 */
	public boolean inserir(Disciplina disciplina){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                em.persist(disciplina);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
        }
        
         /**
	 * Remover Disciplina do banco de dados de Disciplinas
	 * @param disciplina
	 * @return true ou false indicando sucesso ou não
	 */
	public boolean remover(Disciplina disciplina){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                Disciplina disciplinaAux = em.find(Disciplina.class, disciplina.getId());
                em.remove(disciplinaAux);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
        }
        
         /**
	 * alterar Disciplina do banco de dados de Disciplinas
	 * @param disciplina
	 * @return true ou false indicando sucesso ou não
	 */
         public boolean alterar(Disciplina disciplina){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                em.merge(disciplina);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
         }
         
         /**
         * Busca todas as Disciplinas do banco de dados
         * @return Lista de Disciplinas
         */
         public List<Disciplina> pesquisarTodos(){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            List<Disciplina> listaDisciplinas = null;
            try{
                tx.begin();
                Query query = em.createQuery("select d from Disciplina d");
                listaDisciplinas = query.getResultList();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(listaDisciplinas);
         }
         
         /**
	 * Pesquisa disciplinas pelo nome
	 * @param nome
	 * @return Disciplina encontrada na busca
	 */
         public List<Disciplina> pesquisarPorNome(String nome){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            List<Disciplina> listaDisciplinas = null;
            try{
                tx.begin();
                Query query = em.createQuery("select d from Disciplina d where d.nome = :nome");
                query.setParameter("nome", nome);
                listaDisciplinas = query.getResultList();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(listaDisciplinas);
         }
         
        /**
	 * Pesquisa disciplinas pelo id
	 * @param id
	 * @return Disciplina encontrada na busca
	 */
	public Disciplina pesquisarPorId(int id){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            Disciplina disciplina=null;
            try{
                tx.begin();
                Query query = em.createQuery("select d from Disciplina d where d.id = :id");
                query.setParameter("id", id);
                disciplina = (Disciplina) query.getSingleResult();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(disciplina);
        }
}
